<?php
/**
Interface DAO de Reserva. Estes m�todos N�O devem ser chamados diretamente.
Ao inv�s disso devem ser chamados por m�todos da classe Reserva.
*/
require_once('DataAccess.php');
require_once('Reserva.php');

class ReservaDAO
{
      private $database;

      public function __construct( )
      {
               $this->database = DataAccess::getConnection();
      }
      
      public function CadastrarReserva( $reserva )
      {
      	$consulta = $this->database->Fetch("BEGIN");
      	$ano 	  = $reserva->ano;
      	$rateio   = $reserva->rateio;
      	$campus   = $reserva->campus;
      	$licitacao = $reserva->licitacao;
      	$setor	  = $reserva->setor;
      	$naturezaDespesa = $reserva->naturezaDespesa;
      	$subElemento	= $reserva->subElemento;
      	$planoInterno   = $reserva->planoInterno;
     
      	if( $consulta )
      	{
      	  //print_r($planoInterno);		
      	  $consulta = $this->database->Fetch("INSERT into t_reserva(t_ano_id, t_rateio_id, t_campus_id
      	  ,tipo_despesa,processo,despesa, t_natureza_despesa_id, t_sub_elemento_id, valor, pi, t_licitacao_id, t_setor_id, data_reserva,situacao, t_plano_interno_cod )
      	  									VALUES('$ano->id','$rateio->id','$campus->id','$reserva->tipoDespesa',
      	  									'$reserva->processo','$reserva->despesa','$naturezaDespesa->id','$subElemento->subElementoId',
      	  									'$reserva->valor','$reserva->pi','$licitacao->id', '$setor->id', CURDATE(),'$reserva->situacao', '$planoInterno->cod' )");
      	  $idReserva = DataAccess::getId();
      	  
      	  if( $consulta )
      	  {
      	  	
      	  	$this->database->Fetch("COMMIT");
      	  	return $idReserva;
      	  }
      	  else
      	  {
      	  	$this->database->Fetch("ROLLBACK");
      	  	return $idReserva;
      	  }
      	}
      
      }
      
      public function AlterarReserva( $reserva )
      {
        $consulta = $this->database->Fetch("BEGIN");
      	$ano 	  = $reserva->ano;
      	$rateio   = $reserva->rateio;
      	$campus   = $reserva->campus;
      	$naturezaDespesa = $reserva->naturezaDespesa;
      	$subElemento	= $reserva->subElemento;
        $planoInterno   = $reserva->planoInterno;
      	$setor          = $reserva->setor;
      	
      	if( $consulta )
      	{
          $sql = "UPDATE t_reserva SET t_ano_id='$ano->id' ,t_rateio_id='$rateio->id', t_campus_id='$campus->id',
          tipo_despesa='$reserva->tipoDespesa', processo='$reserva->processo', despesa='$reserva->despesa', t_natureza_despesa_id='$naturezaDespesa->id',
          t_sub_elemento_id='$subElemento->subElementoId', valor='$reserva->valor', pi='$reserva->pi', situacao='$reserva->situacao', t_setor_id='$setor->id' ";
          if(!$planoInterno){
              if($planoInterno != NULL){
                if(strcmp($planoInterno, "") != 0){
                    $sql .= "t_plano_interno_cod = '$planoInterno->cod' ";
                }
              }
          }
          $sql .= "where id = '$reserva->id' ";
          $consulta = $this->database->Fetch($sql);
      	  									
      	  
      	  if( $consulta )
      	  {

                $this->database->Fetch("COMMIT");
      	  	return TRUE;
      	  }
      	  else
      	  {

                $this->database->Fetch("ROLLBACK");
      	  	return FALSE;
      	  }
      	}
      	else
      	{
                
      		$this->database->Fetch("ROLLBACK");
        	return FALSE;
      	}      	
      	
      }
      
      public function ExcluirReserva( $reservaId )
      {
      		$consulta = $this->database->Fetch("BEGIN");
		
			if ( $consulta )
    		{       
      			$consulta = $this->database->Fetch(" DELETE FROM t_reserva WHERE id = '$reservaId' ");
               
    			if( $consulta )
            	{
            		$this->database->Fetch("COMMIT");
            		return TRUE;
           		}
           		else
           		{
        			$consulta = $this->database->Fetch("ROLLBACK");
           			return FALSE;
           		}
    		}
    		else
    		{
    			$consulta = $this->database->Fetch("ROLLBACK");
            	return FALSE;
    		}
      }
      /**
      Busca na tabela t_reserva todas as reservas v�nculadas a um campus de chave-prim�ria $campusId.
      Para cada registro encontrado ser� criada uma inst�ncia de Fonte com todos os valores das colunas do registro retornado.
      Por fim, este m�todo retornar� um array de objetos Fonte para os registros encontrados no banco de dados.
      @programaId - Identificador no banco de dados do programa que cont�m as fontes.
      @return - Retorna um array de objetos do tipo Fonte. Caso n�o encontre nenhum registro retorna FALSE.
     */
      public function LoadReservas( $campusId )
      {
             $consulta = $this->database->Fetch(" SELECT * FROM t_reserva WHERE t_campus_id = '".$campusId."'");
             if( $consulta != FALSE )
             {
                  $rows = $this->database->getRow();
                  $objetos = array();

                  for( $i = 0; $i < count($rows); $i++ )
                  {
                       $reserva = new Reserva();
                       
                       $reserva->id = $rows[$i]['id'];
                       
                       $ano = new Ano();
                       $reserva->ano = $ano->CarregarAno( $rows[$i]['t_ano_id'] );
                       
                       $rateio = new Rateio();
                       $reserva->rateio = $rateio->CarregarRateio($rows[$i]['t_rateio_id'] );                    
                       
                       $campus = new Campus();
                       $reserva->campus = $campus->CarregarCampus($rows[$i]['t_campus_id']);
                       
                       $setor = new Setor();
                       $reserva->setor = $setor->CarregarSetor($rows[$i]['t_setor_id']);
                       
                       $reserva->tipoDespesa = $rows[$i]['tipo_despesa'];
                       
                       $reserva->processo = $rows[$i]['processo'];
                       
                       $reserva->despesa = $rows[$i]['despesa'];
                       
                       $naturezaDespesa = new NaturezaDespesa();
                       $reserva->naturezaDespesa =$naturezaDespesa->CarregarNaturezaDespesa($rows[$i]['t_natureza_despesa_id']);
                       
                       $subElemento = new SubElemento();
                       $reserva->subElemento = $subElemento->CarregarSubElemento($rows[$i]['t_natureza_despesa_id'], $rows[$i]['t_sub_elemento_id']);    
                       
                       $reserva->valor = $rows[$i]['valor'];
                       
                       $reserva->data = $rows[$i]['data_reserva'];
                       
                       $reserva->pi = $rows[$i]['pi'];
                       
                       $licitacao = new Licitacao();
                       $reserva->licitacao = $licitacao->CarregarLicitacao($rows[$i]['t_licitacao_id']);

                       $planoInterno = new PlanoInterno();
                       $reserva->planoInterno = $planoInterno->ConsultarPorCodigo($rows[$i]['t_plano_interno_cod']);
                       $objetos[] = $reserva;
                  }

                  return $objetos;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }
      
      public function LoadReservasPorProcesso( $processo )
      {
             $consulta = $this->database->Fetch(" SELECT * FROM t_reserva WHERE processo = '$processo' AND situacao = 'R'" );
             if( $consulta != FALSE )
             {
                  $rows = $this->database->getRow();
                  $objetos = array();

                  for( $i = 0; $i < count($rows); $i++ )
                  {
					   $reserva = new Reserva();
                       
                       $reserva->id = $rows[$i]['id'];
                       
                       $ano = new Ano();
                       $reserva->ano = $ano->CarregarAno( $rows[$i]['t_ano_id'] );
                       
                       $rateio = new Rateio();
                       $reserva->rateio = $rateio->CarregarRateio($rows[$i]['t_rateio_id'] );                    
                       
                       $campus = new Campus();
                       $reserva->campus = $campus->CarregarCampus($rows[$i]['t_campus_id']);
                       
                       $setor = new Setor();
                       $reserva->setor = $setor->CarregarSetor($rows[$i]['t_setor_id']);
                       
                       $reserva->tipoDespesa = $rows[$i]['tipo_despesa'];
                       
                       $reserva->processo = $rows[$i]['processo'];
                       
                       $reserva->despesa = $rows[$i]['despesa'];
                       
                       $naturezaDespesa = new NaturezaDespesa();
                       $reserva->naturezaDespesa =$naturezaDespesa->CarregarNaturezaDespesa($rows[$i]['t_natureza_despesa_id']);
                       
                       $subElemento = new SubElemento();
                       $reserva->subElemento = $subElemento->CarregarSubElemento($rows[$i]['t_natureza_despesa_id'], $rows[$i]['t_sub_elemento_id']);    
                       
                       $reserva->valor = $rows[$i]['valor'];
                       
                       $reserva->data = $rows[$i]['data_reserva'];
                       
                       $reserva->pi = $rows[$i]['pi'];
                       
                       $licitacao = new Licitacao();
                       $reserva->licitacao = $licitacao->CarregarLicitacao($rows[$i]['t_licitacao_id']);
                       
                       $planoInterno = new PlanoInterno();
                       $reserva->planoInterno = $planoInterno->ConsultarPorCodigo($rows[$i]['t_plano_interno_cod']);
                       
                       $objetos[] = $reserva;                       
                  }

                  return $objetos;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }

      public function LoadReservasPorFonte( $fonteId )
      {
             $consulta = $this->database->Fetch("SELECT r.* FROM t_reserva r
                    left join t_rateio rat on r.t_rateio_id = rat.id
                    where rat.t_fonte_id ='$fonteId'" );
             if( $consulta != FALSE )
             {
                  $rows = $this->database->getRow();
                  $objetos = array();

                  for( $i = 0; $i < count($rows); $i++ )
                  {
                       $reserva = new Reserva();
                       
                       $reserva->id = $rows[$i]['id'];
                       
                       $ano = new Ano();
                       $reserva->ano = $ano->CarregarAno( $rows[$i]['t_ano_id'] );
                       
                       $rateio = new Rateio();
                       $reserva->rateio = $rateio->CarregarRateio($rows[$i]['t_rateio_id'] );                    
                       
                       $campus = new Campus();
                       $reserva->campus = $campus->CarregarCampus($rows[$i]['t_campus_id']);
                       
                       $setor = new Setor();
                       $reserva->setor = $setor->CarregarSetor($rows[$i]['t_setor_id']);
                       
                       $reserva->tipoDespesa = $rows[$i]['tipo_despesa'];
                       
                       $reserva->processo = $rows[$i]['processo'];
                       
                       $reserva->despesa = $rows[$i]['despesa'];
                       
                       $naturezaDespesa = new NaturezaDespesa();
                       $reserva->naturezaDespesa =$naturezaDespesa->CarregarNaturezaDespesa($rows[$i]['t_natureza_despesa_id']);
                       
                       $subElemento = new SubElemento();
                       $reserva->subElemento = $subElemento->CarregarSubElemento($rows[$i]['t_natureza_despesa_id'], $rows[$i]['t_sub_elemento_id']);    
                       
                       $reserva->valor = $rows[$i]['valor'];
                       
                       $reserva->data = $rows[$i]['data_reserva'];
                       
                       $reserva->pi = $rows[$i]['pi'];
                       
                       $licitacao = new Licitacao();
                       $reserva->licitacao = $licitacao->CarregarLicitacao($rows[$i]['t_licitacao_id']);
                       
                       $planoInterno = new PlanoInterno();
                       $reserva->planoInterno = $planoInterno->ConsultarPorCodigo($rows[$i]['t_plano_interno_cod']);
                       
                       $objetos[] = $reserva;                       
                  }

                  return $objetos;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }

      public function LoadReservasPorAcao( $acaoId )
      {
             $consulta = $this->database->Fetch("SELECT r . *
                        FROM t_reserva r
                        LEFT JOIN t_rateio rat ON r.t_rateio_id = rat.id
                        LEFT JOIN t_fonte f ON rat.t_fonte_id = f.id
                        WHERE f.t_programa_id ='$acaoId'
                     order by f.t_programa_id" );
             if( $consulta != FALSE )
             {
                  $rows = $this->database->getRow();
                  $objetos = array();

                  for( $i = 0; $i < count($rows); $i++ )
                  {
                       $reserva = new Reserva();
                       
                       $reserva->id = $rows[$i]['id'];
                       
                       $ano = new Ano();
                       $reserva->ano = $ano->CarregarAno( $rows[$i]['t_ano_id'] );
                       
                       $rateio = new Rateio();
                       $reserva->rateio = $rateio->CarregarRateio($rows[$i]['t_rateio_id'] );                    
                       
                       $campus = new Campus();
                       $reserva->campus = $campus->CarregarCampus($rows[$i]['t_campus_id']);
                       
                       $setor = new Setor();
                       $reserva->setor = $setor->CarregarSetor($rows[$i]['t_setor_id']);
                       
                       $reserva->tipoDespesa = $rows[$i]['tipo_despesa'];
                       
                       $reserva->processo = $rows[$i]['processo'];
                       
                       $reserva->despesa = $rows[$i]['despesa'];
                       
                       $naturezaDespesa = new NaturezaDespesa();
                       $reserva->naturezaDespesa =$naturezaDespesa->CarregarNaturezaDespesa($rows[$i]['t_natureza_despesa_id']);
                       
                       $subElemento = new SubElemento();
                       $reserva->subElemento = $subElemento->CarregarSubElemento($rows[$i]['t_natureza_despesa_id'], $rows[$i]['t_sub_elemento_id']);    
                       
                       $reserva->valor = $rows[$i]['valor'];
                       
                       $reserva->data = $rows[$i]['data_reserva'];
                       
                       $reserva->pi = $rows[$i]['pi'];
                       
                       $licitacao = new Licitacao();
                       $reserva->licitacao = $licitacao->CarregarLicitacao($rows[$i]['t_licitacao_id']);
                       
                       $planoInterno = new PlanoInterno();
                       $reserva->planoInterno = $planoInterno->ConsultarPorCodigo($rows[$i]['t_plano_interno_cod']);
                       
                       $objetos[] = $reserva;                       
                  }

                  return $objetos;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }
      
      public function CarregarTotalValorReservaPorRateio( $rateioId )
      {
             $consulta = $this->database->Fetch("SELECT sum(valor) as total FROM t_reserva where t_rateio_id = $rateioId");
             if( $consulta != FALSE )
             {
                 $resultado = mysql_fetch_array($consulta);
                  return $resultado["total"];
             }
             else
             {
                 return FALSE;
             }
      }

       public function CarregarTotalValorReservaPorRateioMenosEmpenho( $rateioId )
      {
             $consulta = $this->database->Fetch("select  (sum(r.valor) - sum(e.valor)) as total from t_empenho e, t_reserva r where e.t_reserva_id = r.id and t_rateio_id = $rateioId");
             if( $consulta != FALSE )
             {
                 $resultado = mysql_fetch_array($consulta);
                  return $resultado["total"];
             }
             else
             {
                 return FALSE;
             }
      }
      
      public function LoadReservasPorSetor( $setorId )
      {
             $consulta = $this->database->Fetch(" SELECT * FROM t_reserva WHERE t_setor_id = '$setorId'");
             if( $consulta != FALSE )
             {
                  $rows = $this->database->getRow();
                  $objetos = array();

                  for( $i = 0; $i < count($rows); $i++ )
                  {
                                              $reserva = new Reserva();
                       
                       $reserva->id = $rows[$i]['id'];
                       
                       $ano = new Ano();
                       $reserva->ano = $ano->CarregarAno( $rows[$i]['t_ano_id'] );
                       
                       $rateio = new Rateio();
                       $reserva->rateio = $rateio->CarregarRateio($rows[$i]['t_rateio_id'] );                    
                       
                       $campus = new Campus();
                       $reserva->campus = $campus->CarregarCampus($rows[$i]['t_campus_id']);
                       
                       $setor = new Setor();
                       $reserva->setor = $setor->CarregarSetor($rows[$i]['t_setor_id']);
                       
                       $reserva->tipoDespesa = $rows[$i]['tipo_despesa'];
                       
                       $reserva->processo = $rows[$i]['processo'];
                       
                       $reserva->despesa = $rows[$i]['despesa'];
                       
                       $naturezaDespesa = new NaturezaDespesa();
                       $reserva->naturezaDespesa =$naturezaDespesa->CarregarNaturezaDespesa($rows[$i]['t_natureza_despesa_id']);
                       
                       $subElemento = new SubElemento();
                       $reserva->subElemento = $subElemento->CarregarSubElemento($rows[$i]['t_natureza_despesa_id'], $rows[$i]['t_sub_elemento_id']);    
                       
                       $reserva->valor = $rows[$i]['valor'];
                       
                       $reserva->data = $rows[$i]['data_reserva'];
                       
                       $reserva->pi = $rows[$i]['pi'];
                       
                       $licitacao = new Licitacao();
                       $reserva->licitacao = $licitacao->CarregarLicitacao($rows[$i]['t_licitacao_id']);
                       
                       $planoInterno = new PlanoInterno();
                       $reserva->planoInterno = $planoInterno->ConsultarPorCodigo($rows[$i]['t_plano_interno_cod']);
                       
                        
                       $objetos[] = $reserva;
                  }

                  return $objetos;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }
      
      /**
      Busca na tabela t_reserva pelo registro de chave-prim�ria $id.
      @id - Chave-prim�ria da fonte cadastrada no banco de dados.
      @return - Retorna um objeto do tipo Reserva com todos os valores das colunas associadas ao registro. Caso n�o encontre nenhum registro retorna FALSE.
      */
      public function LoadReserva( $id )
      {
             $consulta = $this->database->Fetch(" SELECT * FROM t_reserva WHERE id = '".$id."'");
             if( $consulta != FALSE && mysql_num_rows($consulta) > 0)
             {
                 	   $rows = $this->database->getRow();
                       $reserva = new Reserva();
                       
                       $reserva->id = $rows[0]['id'];
                       
                       $ano = new Ano();
                       $reserva->ano = $ano->CarregarAno( $rows[0]['t_ano_id'] );
                       
                       $rateio = new Rateio();
                       $reserva->rateio = $rateio->CarregarRateio($rows[0]['t_rateio_id'] );                    
                       
                       $campus = new Campus();
                       $reserva->campus = $campus->CarregarCampus($rows[0]['t_campus_id']);
                       
                       $setor = new Setor();
                       $reserva->setor = $setor->CarregarSetor($rows[0]['t_setor_id']);
                       
                       $reserva->tipoDespesa = $rows[0]['tipo_despesa'];
                       
                       $reserva->processo = $rows[0]['processo'];
                       
                       $reserva->despesa = $rows[0]['despesa'];
                       
                       $naturezaDespesa = new NaturezaDespesa();
                       $reserva->naturezaDespesa =$naturezaDespesa->CarregarNaturezaDespesa($rows[0]['t_natureza_despesa_id']);
                       
                       $subElemento = new SubElemento();
                       $reserva->subElemento = $subElemento->CarregarSubElemento($rows[0]['t_natureza_despesa_id'], $rows[0]['t_sub_elemento_id']);    
                       
                       $reserva->valor = $rows[0]['valor'];
                       
                       $reserva->data = $rows[0]['data_reserva'];
                       
                       $reserva->pi = $rows[0]['pi'];
                       
                       $licitacao = new Licitacao();
                       $reserva->licitacao = $licitacao->CarregarLicitacao($rows[0]['t_licitacao_id']);
                       
                       $planoInterno = new PlanoInterno();
                       $reserva->planoInterno = $planoInterno->ConsultarPorCodigo($rows[0]['t_plano_interno_cod']);
                       
                                        
                 return $reserva;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }

      public function CarregarTodos()
      {
             $consulta = $this->database->Fetch(" SELECT * FROM t_reserva ");
             if( $consulta != FALSE )
             {
                  $rows = $this->database->getRow();
                  $objetos = array();

                  for( $i = 0; $i < count($rows); $i++ )
                  {
                                              $reserva = new Reserva();

                       $reserva->id = $rows[$i]['id'];

                       $ano = new Ano();
                       $reserva->ano = $ano->CarregarAno( $rows[$i]['t_ano_id'] );

                       $rateio = new Rateio();
                       $reserva->rateio = $rateio->CarregarRateio($rows[$i]['t_rateio_id'] );

                       $campus = new Campus();
                       $reserva->campus = $campus->CarregarCampus($rows[$i]['t_campus_id']);

                       $setor = new Setor();
                       $reserva->setor = $setor->CarregarSetor($rows[$i]['t_setor_id']);

                       $reserva->tipoDespesa = $rows[$i]['tipo_despesa'];

                       $reserva->processo = $rows[$i]['processo'];

                       $reserva->despesa = $rows[$i]['despesa'];

                       $naturezaDespesa = new NaturezaDespesa();
                       $reserva->naturezaDespesa =$naturezaDespesa->CarregarNaturezaDespesa($rows[$i]['t_natureza_despesa_id']);

                       $subElemento = new SubElemento();
                       $reserva->subElemento = $subElemento->CarregarSubElemento($rows[$i]['t_natureza_despesa_id'], $rows[$i]['t_sub_elemento_id']);

                       $reserva->valor = $rows[$i]['valor'];

                       $reserva->data = $rows[$i]['data_reserva'];

                       $reserva->pi = $rows[$i]['pi'];

                       $licitacao = new Licitacao();
                       $reserva->licitacao = $licitacao->CarregarLicitacao($rows[$i]['t_licitacao_id']);

                       $planoInterno = new PlanoInterno();
                       $reserva->planoInterno = $planoInterno->ConsultarPorCodigo($rows[$i]['t_plano_interno_cod']);


                       $objetos[] = $reserva;
                  }

                  return $objetos;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }
            
}
?>
